home *** CD-ROM | disk | FTP | other *** search
- RCS_ID_C "$Id: user.c,v 1.1 93/09/17 06:25:47 ppessi Exp $";
- /*
- * user.c
- *
- * Get group and user names for their ids
- *
- * Author: ppessi <Pekka.Pessi@hut.fi>
- *
- * Copyright (c) 1993 Pekka Pessi
- *
- * Created : Wed May 26 09:21:59 1993 ppessi
- * Last modified: Fri Sep 17 06:02:10 1993 ppessi
- *
- */
-
- #include <exec/lists.h>
- #include <exec/nodes.h>
- #include <dos/var.h>
-
- #if __SASC
- #include <proto/exec.h>
- #include <proto/dos.h>
- #else
- #error Unsupported Compiler.
- #endif
-
- #include <pwd.h>
- #include <grp.h>
-
- #include <stdlib.h>
- #include <string.h>
-
- static void wtoa(UWORD w, char a[9]);
-
- /*
- * user
- * Return user login for given uid.
- * Return also group ID if specified.
- * Names have space filled up to 8 chars.
- * Use a cache of 1 user
- */
- UBYTE *
- user(UWORD uid)
- {
- static UBYTE retval[9]; /* buffer to trash */
- static struct passwd *user = NULL;
-
- /* Same as last one? */
- if (user && user->pw_uid == uid) {
- return retval;
- }
-
- if (user = getpwuid(uid)) {
- int i;
- for (i = 0; i < 8 && (retval[i] = user->pw_name[i]); i++)
- ;
- for (; i < 8; retval[i++] = ' ')
- ;
- retval[8] = '\0';
- } else {
- wtoa(uid, retval);
- }
-
- return retval;
- }
-
- UBYTE *
- group(UWORD gid)
- {
- static UBYTE retval[9];
- static struct group *group = NULL;
-
- /* Same as last one? */
- if (group && group->gr_gid == gid) {
- return retval;
- }
-
- if (group = getgrgid(gid)) {
- int i;
- for (i = 0; i < 8 && (retval[i] = group->gr_name[i]); i++)
- ;
- for (; i < 8; retval[i++] = ' ')
- ;
- retval[8] = '\0';
- } else {
- wtoa(gid, retval);
- }
-
- return retval;
- }
-
- /*
- * wtoa
- */
- static void
- wtoa(UWORD w, char a[9])
- {
- short i;
- char b[8];
-
- for (i = 0; i < 8; i++)
- a[i] = ' ';
- a[8] = '\0';
-
- if (w == 0) {
- a[0] = '0';
- } else {
- b[5] = '\0';
- b[4] = w % 10 + '0'; w /= 10;
- b[3] = w % 10 + '0'; w /= 10;
- b[2] = w % 10 + '0'; w /= 10;
- b[1] = w % 10 + '0'; w /= 10;
- b[0] = w + '0';
-
- for (i = 0; b[i] == '0'; i++)
- ;
- for (; i < 5; i++)
- *a++ = b[i];
- }
- }
-
-